import time, datetime

'''时间戳10位的，其精度是秒，而13位的，精度是毫秒'''
'''
%y　　　　  两位数的年份表示（00-99）
%Y 　　　　四位数的年份表示（000-9999）
%m 　　　　月份（01-12）
%d 　　　　 月内中的一天（0-31）
%H 　　　    24小时制小时数（0-23）
%I 　　　  　12小时制小时数（01-12）
%M 　　　　分钟数（00=59）
%S 　　　 　秒（00-59）
%w 　　　　星期（0-6），星期天为星期的开始
'''

class time_use:

    def get_current_time(self,add=0,timedelta='hours'):
        '''
        :param add: 正整数就加天数，负就相反
        :return: 返回字符串格式时间
        '''
        if add==0:
            now = int(time.time())
            # 转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
            timeArray = time.localtime(now)
            otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)

            return otherStyleTime
        else:
            #选择当前时间的天、时、分的前推或者后退
            if timedelta=='days':
                return (datetime.datetime.now() + datetime.timedelta(days=add)).strftime("%Y-%m-%d %H:%M:%S")
            if timedelta=='hours':
                return (datetime.datetime.now() + datetime.timedelta(hours=add)).strftime("%Y-%m-%d %H:%M:%S")
            if timedelta=='minutes':
                return (datetime.datetime.now() + datetime.timedelta(minutes=add)).strftime("%Y-%m-%d %H:%M:%S")





    def stamp_time(self, time1):
        '''
        :param time1: 10位和13位时间戳
        :return: 转换为正常日期 '2021-05-14 00:00:00'
        '''
        try:

            if len(str(time1)) == 10:
                time1 = time1
            elif len(str(time1)) == 13:
                time1 = time1 / 1000
            timeStamp = time.localtime(time1)
            otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStamp)
            return otherStyleTime
        except OSError:
            return '时间戳格式不正确长度有'+str(len(str(time1)))+'位'

    def time_stamp(self, time_str):
        '''
        作用：生成指定时间的时间戳
        :param time_str: '2019-08-23 08:59:55' 只支持这种格式
        :return: 13位的时间戳和10位的时间戳
        '''
        datetime_now = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
        # print(datetime_now)
        # datetime_now='2021-05-14 09:40:40.809714'
        # 获取前10位，时间点相当于从UNIX TIME的纪元时间开始的当年时间编号
        date_stamp = str(int(time.mktime(datetime_now.timetuple())))

        # 获取后3位，微秒
        data_microsecond = str("%06d" % datetime_now.microsecond)[0:3]

        date_stamps = date_stamp + data_microsecond
        return int(date_stamps), int(date_stamp)



time1 = time_use()
print(time1.get_current_time(2))
print(time1.time_stamp('2021-08-17 09:55:07'))
print(time1.stamp_time(1621216507000))
print(time1.stamp_time(1621216507))
